package experiment.e03.code;

import java.util.Arrays;
import java.util.Random;

/**
 * @author thinkpad - 83start
 * @version v1.0
 * @create 2022/9/29 15:35
 * @package experiment.e03
 * @description
 */

public class E01_Sort {
    public static void main(String[] args) throws Exception {
        // 随机产生数组元素
        int[] arr = new int[10];
        for (int i = 0; i < 10; i++) {
            arr[i] = new Random().nextInt(10);
        }
        // 输出原数组
        System.out.println(Arrays.toString(arr));

        // 选择排序并输出
        int[] sort = sort(arr);
        System.out.println(Arrays.toString(sort));
    }

    /**
     * 实现选择排序
     * @param sourceArray
     * @return
     * @throws Exception
     */
    public static int[] sort(int[] sourceArray) throws Exception {
        int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);

        // 总共要经过 N-1 轮比较
        for (int i = 0; i < arr.length - 1; i++) {
            int min = i;

            // 每轮需要比较的次数 N-i
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[min]) {
                    // 记录目前能找到的最小值元素的下标
                    min = j;
                }
            }

            // 将找到的最小值和i位置所在的值进行交换
            if (i != min) {
                int tmp = arr[i];
                arr[i] = arr[min];
                arr[min] = tmp;
            }

        }
        return arr;
    }
}
